import os
import cv2
import numpy as np

def generate_lr_from_hr():
    # -------------------------- 请修改这里的路径 --------------------------
    hr_dir = r"datasets/HR"  # 重命名后的HR文件夹（输入）
    lr_dir = r"datasets/LR"  # 生成的LR文件夹（输出）
    scale = 4  # 降采样比例（1/4分辨率，对应x4超分）
    # ----------------------------------------------------------------------

    # 创建LR输出文件夹
    os.makedirs(lr_dir, exist_ok=True)

    # 遍历HR文件夹中的所有图片
    hr_files = [f for f in os.listdir(hr_dir) if f.endswith(('.jpg', '.png'))]
    if not hr_files:
        print("未找到HR图片！请检查HR文件夹路径是否正确。")
        return

    # 批量降采样
    for filename in hr_files:
        # 读取HR图片（保持原始通道）
        hr_path = os.path.join(hr_dir, filename)
        hr_img = cv2.imread(hr_path, cv2.IMREAD_UNCHANGED)
        if hr_img is None:
            print(f"跳过：无法读取图片 {filename}")
            continue

        # 获取HR尺寸，计算LR尺寸（确保是整数，若HR尺寸不是4的倍数，自动调整）
        h, w = hr_img.shape[:2]
        lr_h = h // scale
        lr_w = w // scale

        # Bicubic降采样（超分任务标准降质方式，模拟真实低分辨模糊）
        lr_img = cv2.resize(hr_img, (lr_w, lr_h), interpolation=cv2.INTER_CUBIC)

        # 保存LR图片（与HR文件名一致）
        lr_path = os.path.join(lr_dir, filename)
        cv2.imwrite(lr_path, lr_img)
        print(f"已生成LR图：{filename} | HR尺寸：{w}×{h} → LR尺寸：{lr_w}×{lr_h}")

    print(f"\nLR图生成完成！共生成 {len(hr_files)} 张图片，保存到：{lr_dir}")

if __name__ == '__main__':
    generate_lr_from_hr()